﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace SoftwareConsulting.BI11.Controls.MicrosoftBugsFixes
{
    /// <summary>
    /// Класс исправления ошибок Microsoft в их компонентах
    /// </summary>
    public static class MicrosoftBugsFixes
    {
        /// <summary>
        /// Добавляет новую строку, основанную на строке по заданному индексу.
        /// Исправляет ошибку с тем, что копируется лишь оформление ее строки, но не ее содержимое
        /// </summary>
        /// <param name="rows"></param>
        /// <param name="indexSource">Индекс строки, на которой основывается новая строка.</param>
        /// <param name="fixBug">Флаг исправления ошибки</param>
        /// <returns></returns>
        public static int AddCopy(this DataGridViewRowCollection rows, int indexSource, bool fixBug)
        {
            int result = rows.AddCopy(indexSource);
            if (fixBug)
            {
                DataGridViewRow row = rows[result];
                for (int i = 0; i < row.Cells.Count; i++)
                {
                    row.Cells[i].Value = rows[indexSource].Cells[i].Value;
                }
            }
            return result;
        }

        /// <summary>
        /// Вставляет по указанной позиции в коллекции новую строку, основанную на строке в заданной позиции.
        /// Исправляет ошибку с тем, что копируется лишь оформление ее строки, но не ее содержимое
        /// </summary>
        /// <param name="rows"></param>
        /// <param name="indexSource">Индекс строки, на которой основывается новая строка.</param>
        /// <param name="indexDestination">Позиция, в которую вставляется строка.</param>
        /// <param name="fixBug">Флаг исправления ошибки</param>        
        public static void InsertCopy(this DataGridViewRowCollection rows, int indexSource, int indexDestination, bool fixBug)
        {
            rows.InsertCopy(indexSource, indexDestination);
            if (fixBug)
            {
                int newIndexSource = indexSource > indexDestination ? indexSource + 1 : indexSource;
                DataGridViewRow row = rows[indexDestination];
                for (int i = 0; i < row.Cells.Count; i++)
                {
                    row.Cells[i].Value = rows[newIndexSource].Cells[i].Value;
                }
            }            
        }
    }
}
